package com.yupi.springbootinit.statemachine.vo;

import lombok.Data;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 状态机配置视图对象
 */
@Data
public class StateMachineConfigVO {
    
    /**
     * 主键ID
     */
    private Long id;
    
    /**
     * 配置名称
     */
    private String configName;
    
    /**
     * 实体类型
     */
    private String entityType;
    
    /**
     * 配置类型
     */
    private String configType;
    
    /**
     * 配置键
     */
    private String configKey;
    
    /**
     * 配置值(JSON格式)
     */
    private String configValue;
    
    /**
     * 解析后的配置值
     */
    private Map<String, Object> parsedConfigValue;
    
    /**
     * 配置描述
     */
    private String description;
    
    /**
     * 是否启用
     */
    private Boolean enabled;
    
    /**
     * 优先级
     */
    private Integer priority;
    
    /**
     * 版本号
     */
    private Integer version;
    
    /**
     * 创建人ID
     */
    private Long creatorId;
    
    /**
     * 创建人姓名
     */
    private String creatorName;
    
    /**
     * 更新人ID
     */
    private Long updaterId;
    
    /**
     * 更新人姓名
     */
    private String updaterName;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    
    /**
     * 配置状态
     */
    private String status;
    
    /**
     * 是否可编辑
     */
    private Boolean editable;
    
    /**
     * 是否可删除
     */
    private Boolean deletable;
    
    /**
     * 配置验证结果
     */
    private ConfigValidationResult validationResult;
    
    /**
     * 配置使用统计
     */
    private ConfigUsageStatistics usageStatistics;
    
    /**
     * 配置验证结果
     */
    @Data
    public static class ConfigValidationResult {
        /**
         * 是否有效
         */
        private Boolean valid;
        
        /**
         * 验证消息
         */
        private String message;
        
        /**
         * 错误详情
         */
        private String errorDetails;
    }
    
    /**
     * 配置使用统计
     */
    @Data
    public static class ConfigUsageStatistics {
        /**
         * 使用次数
         */
        private Long usageCount;
        
        /**
         * 最后使用时间
         */
        private LocalDateTime lastUsedTime;
        
        /**
         * 关联实体数量
         */
        private Long relatedEntityCount;
    }
}